class Solution {
public:
    using ll=long long;
    string fractionToDecimal(int numerator, int denominator) {
        ll a=numerator, b=denominator;
        string sign=a*b<0?"-":"";
        a=abs(a), b=abs(b);

        ll q=a/b, r=a%b;
        if(r==0) return sign+to_string(q); //可以整除

        string ans=sign+to_string(q)+".";
        unordered_map<ll, int> r2pos={{r, ans.size()}}; //初始余数对应位置
        while(r) //枚举每一个循环节
        {
            r*=10;
            q=r/b;
            r%=b; //当前余数节
            ans+='0'+q;
            if(r2pos.contains(r)) { //存在循环节
                int pos=r2pos[r]; //循环节起始位置
                return ans.substr(0, pos)+"("+(ans.substr(pos)+")");
            }
            r2pos[r]=ans.size();
        }
        return ans;
    }
};